/**
 * 用户信息安全访问工具
 * 防止访问未定义的用户属性导致的错误
 */

/**
 * 安全获取用户ID
 * @param {Object} userStore - 用户store对象
 * @returns {string|null} 用户ID或null
 */
export function getSafeUserId(userStore) {
  try {
    return userStore?.userInfo?.user?.userId || null
  } catch (error) {
    console.warn('Error accessing userId:', error)
    return null
  }
}

/**
 * 安全获取用户信息
 * @param {Object} userStore - 用户store对象
 * @returns {Object|null} 用户信息对象或null
 */
export function getSafeUserInfo(userStore) {
  try {
    return userStore?.userInfo?.user || null
  } catch (error) {
    console.warn('Error accessing user info:', error)
    return null
  }
}

/**
 * 检查用户是否已登录
 * @param {Object} userStore - 用户store对象
 * @returns {boolean} 是否已登录
 */
export function isUserLoggedIn(userStore) {
  try {
    return !!(userStore?.userInfo?.user?.userId)
  } catch (error) {
    console.warn('Error checking login status:', error)
    return false
  }
}

/**
 * 安全执行需要用户登录的操作
 * @param {Object} userStore - 用户store对象
 * @param {Function} callback - 需要执行的回调函数
 * @param {string} operationName - 操作名称，用于日志
 * @returns {Promise|any} 回调函数的返回值
 */
export function safeExecuteWithUser(userStore, callback, operationName = 'operation') {
  try {
    if (!isUserLoggedIn(userStore)) {
      console.warn(`User not logged in, skipping ${operationName}`)
      return null
    }
    
    return callback(userStore.userInfo.user)
  } catch (error) {
    console.error(`Error executing ${operationName}:`, error)
    return null
  }
}

/**
 * 安全获取用户属性
 * @param {Object} userStore - 用户store对象
 * @param {string} propertyPath - 属性路径，如 'level' 或 'asset.0.availableAmount'
 * @param {any} defaultValue - 默认值
 * @returns {any} 属性值或默认值
 */
export function getSafeUserProperty(userStore, propertyPath, defaultValue = null) {
  try {
    if (!isUserLoggedIn(userStore)) {
      return defaultValue
    }
    
    const user = userStore.userInfo.user
    const properties = propertyPath.split('.')
    
    let value = user
    for (const prop of properties) {
      if (value && typeof value === 'object' && prop in value) {
        value = value[prop]
      } else {
        return defaultValue
      }
    }
    
    return value !== undefined ? value : defaultValue
  } catch (error) {
    console.warn(`Error accessing user property ${propertyPath}:`, error)
    return defaultValue
  }
}

/**
 * 创建安全的用户信息访问器
 * @param {Object} userStore - 用户store对象
 * @returns {Object} 包含安全访问方法的对象
 */
export function createUserAccessor(userStore) {
  return {
    get userId() {
      return getSafeUserId(userStore)
    },
    
    get userInfo() {
      return getSafeUserInfo(userStore)
    },
    
    get isLoggedIn() {
      return isUserLoggedIn(userStore)
    },
    
    getProperty(path, defaultValue = null) {
      return getSafeUserProperty(userStore, path, defaultValue)
    },
    
    execute(callback, operationName) {
      return safeExecuteWithUser(userStore, callback, operationName)
    }
  }
}
